python array和list的区别 您所在的位置:网站首页 python array和list区别 python array和list的区别

python array和list的区别

2023-07-18 13:26| 来源: 网络整理| 查看: 265

我并没有声称这是完整的答案,但有一些提示可以理解这一点.

bytearray是一个字节序列,list是一个对象引用序列.所以[1,2,3]实际上保存了存储在其他地方存储在内存中的整数的指针.要计算列表结构的总内存消耗,我们可以这样做(我正在进一步使用sys.getsizeof,它调用__si​​zeof__加上GC开销)

>>> x = [1,2,3]

>>> sum(map(getsizeof, x)) + getsizeof(x)

172

不同机器上的结果可能不同.

另外,看看这个:

>> getsizeof([])

64

这是因为列表是可变的.为了快速,这个结构分配一些内存范围来存储对象的引用(加上元的一些存储,例如列表的长度).附加项目时,下一个内存单元格将填充对这些项目的引用.当没有空间存储新项目时,将分配新的更大范围,在那里复制现有数据并释放旧数据.这称为动态数组.

您可以通过运行此代码来观察此行为.

import sys

data=[]

n=15

for k in range(n):

a = len(data)

b = sys.getsizeof(data)

print('Length: {0:3d}; Size in bytes: {1:4d}'.format(a, b))

data.append(None)

我的结果:

Length: 0; Size in bytes: 64

Length: 1; Size in bytes: 96

Length: 2; Size in bytes: 96

Length: 3; Size in bytes: 96

Length: 4; Size in bytes: 96

Length: 5; Size in bytes: 128

Length: 6; Size in bytes: 128

Length: 7; Size in bytes: 128

Length: 8; Size in bytes: 128

Length: 9; Size in bytes: 192

Length: 10; Size in bytes: 192

Length: 11; Size in bytes: 192

Length: 12; Size in bytes: 192

Length: 13; Size in bytes: 192

Length: 14; Size in bytes: 192

我们可以看到有64个字节用于存储8个内存地址(每个64位).

与bytearray()几乎相同(将第二行更改为data = bytearray()并在最后一行中追加1).

Length: 0; Size in bytes: 56

Length: 1; Size in bytes: 58

Length: 2; Size in bytes: 61

Length: 3; Size in bytes: 61

Length: 4; Size in bytes: 63

Length: 5; Size in bytes: 63

Length: 6; Size in bytes: 65

Length: 7; Size in bytes: 65

Length: 8; Size in bytes: 68

Length: 9; Size in bytes: 68

Length: 10; Size in bytes: 68

Length: 11; Size in bytes: 74

Length: 12; Size in bytes: 74

Length: 13; Size in bytes: 74

Length: 14; Size in bytes: 74

区别在于内存现在用来保存实际的字节值,而不是指针.

希望能帮助您进一步调查.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有